﻿-- this script is for SQL Server and Azure SQL

--IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)JOB_LISTENERS_$(TablePrefix)JOB_DETAILS]') AND parent_object_id = OBJECT_ID(N'[dbo].[$(TablePrefix)JOB_LISTENERS]'))
--ALTER TABLE [dbo].[$(TablePrefix)JOB_LISTENERS] DROP CONSTRAINT [FK_$(TablePrefix)JOB_LISTENERS_$(TablePrefix)JOB_DETAILS]

--IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)TRIGGER_LISTENERS_$(TablePrefix)TRIGGERS]') AND parent_object_id = OBJECT_ID(N'[dbo].[$(TablePrefix)TRIGGER_LISTENERS]'))
--ALTER TABLE [dbo].[$(TablePrefix)TRIGGER_LISTENERS] DROP CONSTRAINT [FK_$(TablePrefix)TRIGGER_LISTENERS_$(TablePrefix)TRIGGERS]

PRINT 'Installing Quartz SQL objects...';

BEGIN TRANSACTION;

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)CALENDARS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [CALENDAR_NAME] [NVARCHAR] (200)  NOT NULL ,
	  [CALENDAR] [VARBINARY](MAX) NOT NULL
	);
	ALTER TABLE [dbo].[$(TablePrefix)CALENDARS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)CALENDARS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[CALENDAR_NAME]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)CRON_TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [CRON_EXPRESSION] [NVARCHAR] (120)  NOT NULL ,
	  [TIME_ZONE_ID] [NVARCHAR] (80) 
	);
	ALTER TABLE [dbo].[$(TablePrefix)CRON_TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)CRON_TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)BLOB_TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [BLOB_DATA] [VARBINARY](MAX) NULL
	);
	ALTER TABLE [dbo].[$(TablePrefix)BLOB_TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)BLOB_TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)FIRED_TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [ENTRY_ID] [NVARCHAR] (140)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,
	  [FIRED_TIME] [BIGINT] NOT NULL ,
	  [SCHED_TIME] [BIGINT] NOT NULL ,
	  [PRIORITY] [INTEGER] NOT NULL ,
	  [STATE] [NVARCHAR] (16)  NOT NULL,
	  [JOB_NAME] [NVARCHAR] (150)  NULL ,
	  [JOB_GROUP] [NVARCHAR] (150)  NULL ,
	  [IS_NONCONCURRENT] BIT  NULL ,
	  [REQUESTS_RECOVERY] BIT  NULL 
	);
	ALTER TABLE [dbo].[$(TablePrefix)FIRED_TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)FIRED_TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[ENTRY_ID]
	  );
	CREATE INDEX IDX_Quartz_FT_TRIG_INST_NAME ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,INSTANCE_NAME);
	CREATE INDEX IDX_Quartz_FT_INST_JOB_REQ_RCVRY ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
	CREATE INDEX IDX_Quartz_FT_J_G ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,JOB_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_FT_JG ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_FT_T_G ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
	CREATE INDEX IDX_Quartz_FT_TG ON [$(TablePrefix)FIRED_TRIGGERS](SCHED_NAME,TRIGGER_GROUP);
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)PAUSED_TRIGGER_GRPS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL 
	);
	ALTER TABLE [dbo].[$(TablePrefix)PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)PAUSED_TRIGGER_GRPS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

--IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[$(TablePrefix)JOB_LISTENERS]') AND type in (N'U'))
--DROP TABLE [dbo].[$(TablePrefix)JOB_LISTENERS]

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)SCHEDULER_STATE] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,
	  [LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,
	  [CHECKIN_INTERVAL] [BIGINT] NOT NULL
	);
	ALTER TABLE [dbo].[$(TablePrefix)SCHEDULER_STATE] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)SCHEDULER_STATE] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[INSTANCE_NAME]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)LOCKS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [LOCK_NAME] [NVARCHAR] (40)  NOT NULL 
	);
	ALTER TABLE [dbo].[$(TablePrefix)LOCKS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)LOCKS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[LOCK_NAME]
	  );
END
ELSE
 PRINT 'It has already been created.';

--IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[$(TablePrefix)TRIGGER_LISTENERS]') AND type in (N'U'))
--DROP TABLE [dbo].[$(TablePrefix)TRIGGER_LISTENERS]


IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)JOB_DETAILS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [DESCRIPTION] [NVARCHAR] (250) NULL ,
	  [JOB_CLASS_NAME] [NVARCHAR] (250)  NOT NULL ,
	  [IS_DURABLE] BIT  NOT NULL ,
	  [IS_NONCONCURRENT] BIT  NOT NULL ,
	  [IS_UPDATE_DATA] BIT  NOT NULL ,
	  [REQUESTS_RECOVERY] BIT  NOT NULL ,
	  [JOB_DATA] [VARBINARY](MAX) NULL
	);
	ALTER TABLE [dbo].[$(TablePrefix)JOB_DETAILS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)JOB_DETAILS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[JOB_NAME],
		[JOB_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)SIMPLE_TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [REPEAT_COUNT] [INTEGER] NOT NULL ,
	  [REPEAT_INTERVAL] [BIGINT] NOT NULL ,
	  [TIMES_TRIGGERED] [INTEGER] NOT NULL
	);

	ALTER TABLE [dbo].[$(TablePrefix)SIMPLE_TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)SIMPLE_TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)SIMPROP_TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [STR_PROP_1] [NVARCHAR] (512) NULL,
	  [STR_PROP_2] [NVARCHAR] (512) NULL,
	  [STR_PROP_3] [NVARCHAR] (512) NULL,
	  [INT_PROP_1] [INT] NULL,
	  [INT_PROP_2] [INT] NULL,
	  [LONG_PROP_1] [BIGINT] NULL,
	  [LONG_PROP_2] [BIGINT] NULL,
	  [DEC_PROP_1] [NUMERIC] (13,4) NULL,
	  [DEC_PROP_2] [NUMERIC] (13,4) NULL,
	  [BOOL_PROP_1] BIT NULL,
	  [BOOL_PROP_2] BIT NULL,
	  [TIME_ZONE_ID] [NVARCHAR] (80) NULL 
	);
	ALTER TABLE [dbo].[$(TablePrefix)SIMPROP_TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)SIMPROP_TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  );
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)TRIGGERS] (
	  [SCHED_NAME] [NVARCHAR] (120)  NOT NULL ,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [DESCRIPTION] [NVARCHAR] (250) NULL ,
	  [NEXT_FIRE_TIME] [BIGINT] NULL ,
	  [PREV_FIRE_TIME] [BIGINT] NULL ,
	  [PRIORITY] [INTEGER] NULL ,
	  [TRIGGER_STATE] [NVARCHAR] (16)  NOT NULL ,
	  [TRIGGER_TYPE] [NVARCHAR] (8)  NOT NULL ,
	  [START_TIME] [BIGINT] NOT NULL ,
	  [END_TIME] [BIGINT] NULL ,
	  [CALENDAR_NAME] [NVARCHAR] (200)  NULL ,
	  [MISFIRE_INSTR] [INTEGER] NULL ,
	  [JOB_DATA] [VARBINARY](MAX) NULL
	);
	ALTER TABLE [dbo].[$(TablePrefix)TRIGGERS] WITH NOCHECK ADD
	  CONSTRAINT [PK_$(TablePrefix)TRIGGERS] PRIMARY KEY  CLUSTERED
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  );
	CREATE INDEX IDX_Quartz_T_J ON [$(TablePrefix)TRIGGERS](SCHED_NAME,JOB_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_T_JG ON [$(TablePrefix)TRIGGERS](SCHED_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_T_C ON [$(TablePrefix)TRIGGERS](SCHED_NAME,CALENDAR_NAME);
	CREATE INDEX IDX_Quartz_T_G ON [$(TablePrefix)TRIGGERS](SCHED_NAME,TRIGGER_GROUP);
	CREATE INDEX IDX_Quartz_T_STATE ON [$(TablePrefix)TRIGGERS](SCHED_NAME,TRIGGER_STATE);
	CREATE INDEX IDX_Quartz_T_N_STATE ON [$(TablePrefix)TRIGGERS](SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
	CREATE INDEX IDX_Quartz_T_N_G_STATE ON [$(TablePrefix)TRIGGERS](SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
	CREATE INDEX IDX_Quartz_T_NEXT_FIRE_TIME ON [$(TablePrefix)TRIGGERS](SCHED_NAME,NEXT_FIRE_TIME);
	CREATE INDEX IDX_Quartz_T_NFT_ST ON [$(TablePrefix)TRIGGERS](SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
	CREATE INDEX IDX_Quartz_T_NFT_MISFIRE ON [$(TablePrefix)TRIGGERS](SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
	CREATE INDEX IDX_Quartz_T_NFT_ST_MISFIRE ON [$(TablePrefix)TRIGGERS](SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
	CREATE INDEX IDX_Quartz_T_NFT_ST_MISFIRE_GRP ON [$(TablePrefix)TRIGGERS](SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
END
ELSE
 PRINT 'It has already been created.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[$(TablePrefix)JOB_HISTORY]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
BEGIN
	CREATE TABLE [dbo].[$(TablePrefix)JOB_HISTORY] (
	  [ENTRY_ID] [BIGINT] NOT NULL PRIMARY KEY IDENTITY,
	  [Scheduler_Instance_Id] [NVARCHAR] (200)  NOT NULL ,
	  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
	  [Fire_Instance_Id] [NVARCHAR] (200)  NOT NULL ,
	  [Scheduled_Fire_Time_Utc] [DATETIME2] (7)  NULL ,
	  [Actual_Fire_Time_Utc] [DATETIME2] (7) NOT NULL ,
	  [Finished_Time_Utc] [DATETIME2] (7) NULL ,
	  [Recovering] [BIT]  NOT NULL,
	  [Vetoed] [BIT]  NOT NULL,
	  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,
	  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,
	  [JOB_NAME] [NVARCHAR] (150)  NULL ,
	  [JOB_GROUP] [NVARCHAR] (150)  NULL ,
	  [FIRED_TIME] [BIGINT] NOT NULL ,
	  [SCHED_TIME] [BIGINT] NOT NULL ,
	  [RUN_TIME] [INT] NOT NULL ,
	  [ERROR] [BIT] NOT NULL ,
	  [ERROR_MESSAGE] [NVARCHAR](MAX) NULL
	);
	CREATE INDEX IDX_Quartz_FT_J_G ON [$(TablePrefix)JOB_HISTORY](SCHED_NAME,JOB_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_FT_JG ON [$(TablePrefix)JOB_HISTORY](SCHED_NAME,JOB_GROUP);
	CREATE INDEX IDX_Quartz_FT_T_G ON [$(TablePrefix)JOB_HISTORY](SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
	CREATE INDEX IDX_Quartz_FT_TG ON [$(TablePrefix)JOB_HISTORY](SCHED_NAME,TRIGGER_GROUP);
	CREATE INDEX IDX_Quartz_FT_E ON [$(TablePrefix)JOB_HISTORY](SCHED_NAME,ERROR);
	CREATE INDEX IDX_Quartz_FT_S ON [$(TablePrefix)JOB_HISTORY](Fire_Instance_Id);
END
ELSE
 PRINT 'It[JOB_HISTORY] has already been created.';


--------------------------------------------设置外键关系---------------------------------

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)CRON_TRIGGERS_$(TablePrefix)TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
BEGIN
	ALTER TABLE [dbo].[$(TablePrefix)CRON_TRIGGERS] ADD
	  CONSTRAINT [FK_$(TablePrefix)CRON_TRIGGERS_$(TablePrefix)TRIGGERS] FOREIGN KEY
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) REFERENCES [dbo].[$(TablePrefix)TRIGGERS] (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) ON DELETE CASCADE;
END
ELSE
	PRINT 'It has already been setted.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)SIMPLE_TRIGGERS_$(TablePrefix)TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
BEGIN
	ALTER TABLE [dbo].[$(TablePrefix)SIMPLE_TRIGGERS] ADD
	  CONSTRAINT [FK_$(TablePrefix)SIMPLE_TRIGGERS_$(TablePrefix)TRIGGERS] FOREIGN KEY
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) REFERENCES [dbo].[$(TablePrefix)TRIGGERS] (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) ON DELETE CASCADE;
END
ELSE
	PRINT 'It has already been setted.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)SIMPROP_TRIGGERS_$(TablePrefix)TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
BEGIN
	ALTER TABLE [dbo].[$(TablePrefix)SIMPROP_TRIGGERS] ADD
	  CONSTRAINT [FK_$(TablePrefix)SIMPROP_TRIGGERS_$(TablePrefix)TRIGGERS] FOREIGN KEY
	  (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) REFERENCES [dbo].[$(TablePrefix)TRIGGERS] (
		[SCHED_NAME],
		[TRIGGER_NAME],
		[TRIGGER_GROUP]
	  ) ON DELETE CASCADE;
END
ELSE
	PRINT 'It has already been setted.';

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_$(TablePrefix)TRIGGERS_$(TablePrefix)JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
BEGIN
	ALTER TABLE [dbo].[$(TablePrefix)TRIGGERS] ADD
	  CONSTRAINT [FK_$(TablePrefix)TRIGGERS_$(TablePrefix)JOB_DETAILS] FOREIGN KEY
	  (
		[SCHED_NAME],
		[JOB_NAME],
		[JOB_GROUP]
	  ) REFERENCES [dbo].[$(TablePrefix)JOB_DETAILS] (
		[SCHED_NAME],
		[JOB_NAME],
		[JOB_GROUP]
	  );
END
ELSE
	PRINT 'It has already been setted.';
	
COMMIT TRANSACTION;
PRINT 'Quartz SQL objects installed';